package study.java.jdk.jdk8._1_stream.collectors.to_map;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import study.java.jdk.jdk8.DataUtils;
import study.java.jdk.jdk8.User;

import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;

@Slf4j
public class _3_toMap_Test {

    private List<User> userLt = DataUtils.buildUserLt();

    /**
     * ==============================
     * （1）键映射
     * （2）值映射
     * （3）合并函数
     * （4）Map 类型
     * ==============================
     *
     * @param keyMapper     Function（key的映射函数）
     * @param valueMapper   Function（value的映射函数）
     * @param mergeFunction BinaryOperator（key 冲突时，调用的合并方法）
     * @param mapSupplier   Supplier（Map 构造器，在需要返回特定的 Map 时使用（默认 HashMap））
     */
    @Test
    public void test() {
        Map<String, User> dest = userLt.stream()
                .collect(Collectors.toMap(User::getCode,
                        Function.identity(),
                        (v1, v2) -> v2,
                        TreeMap::new));
        log.info("{}", dest.getClass().getSimpleName());
    }
}
